原型模式
读书笔记
曾探. JavaScript设计模式与开发实践 (图灵原创). 人民邮电出版社. Kindle 版本.
原型模式不单是一种设计模式,也被称为一种编程范型,在某种程度上它构成了 JavaScript
的根本
其特点主要有以下几点:
1. 所有的数据都是对象。
虽然严格意义上不能说 JavaScript
中所有数据都是对象,但绝大部分数据都是对象
nummber、boolean、string 这几种基本类型数据也可以通过 包装类 的方式编程对象处理
2. 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它。
每一个对象都是基于另一个对象的克隆,而克隆是创建对象的手段
JavaScript
中有着跟对象 Object.prototype
对象,我们遇到的所有对象,以及上都是从 Object.prototype
克隆而来,也就是说 Object.prototype
是他们的原型
var obj1 = new Object();
var obj2 = {};
console. log( Object. getPrototypeOf( obj1 ) === Object. prototype ); // 输出: true
console. log( Object. getPrototypeOf( obj2 ) === Object. prototype ); // 输出: true
可以看到这里定义对象的两种方式,原型都是 Object.prototype
3. 对象会记住它的原型。
JavaScript
给对象提供了一个名为 __ proto__
的隐藏属性,某个对象的 __ proto__
属性默认会指向它的构造器的原型对象
4. 如果对象无法响应某个请求,它会把这个请求委托给它自己的原型。
这其实对应着原型链委托机制
当一个对象无法响应某个请求的时候,它会顺着原型链把请求传递下去,直到遇到一个可以处理该请求的对象为止
Object.getPrototypeOf(a) === Object.prototype
function Person( name ){
this.name = name;
};
Person.prototype.getName = function(){
return this.name;
};
var a = new Person( 'sven' ) // 构造函数
console. log( a.name ); // 输出: sven
console. log( a.getName() ); // 输出: sven
console. log( Object. getPrototypeOf( a ) === Person. prototype ); // 输出: true